Google AI challenge - стратегии ботов
Университет Ватерлоо при поддержке Google организовал состязание по спортивному программированию ботов для игры стратегии реального времени Galcon. С виду игра очень простая - есть планеты и корабли (на планетах или в полёте) надо захватить или преобладать на всей карте. Бот можно написать на большинстве популярных языков - C#, Java, Python, C++, Scala, PHP - для этого надо скачать "starter package", запустить у себя из консоли эмулятор и тренироваться покуда не будет Совершенство которое можно залить на сайт.
Стратегии которые можно реализовать - большая ценность и в то же время без кода они ничто. Я не буду рассматривать варианты с генетическим программированием, поскольку для этого надо хранить хромосомы, по несколько сотен раз запускать одну и ту же карту что-бы получить стабильный вид.. и в конце концов бот будет с зашитыми матрицами поведения которые нельзя поменять против других противников.
Итак некоторые общие стратегии
-
Начинайте максимальным полным захватом планет — это даст максимальный прирост продуктивности особенно необходимой вначале игры. Внутренние состояния игры можно помещать в глобальные переменные вне doTurn()
-
Атаковать планеты со смешанной сортировкой - пропорционально их продуктивности и обратно пропорционально защите и расстоянию до неё
-
Высылать подмогу своим планетам которые атакованы или имеют наибольшую пропорцию в продуктивности к защите - это равноценно распределяет силы по своим планетам
-
Прогнозировать исход битвы учитывая все входящие корабли и продуктивность планеты
-
Учитывать начальную позицию и общую топологию региона - некоторые карты заранее проигрышные (карты симметричны)
-
Менять агрессивность в зависимости от прогноза будущего получаемого от сравнивания себя с противником через размер всего флота + X ходов вперёд * продуктивность планет
Тактика
Я пару раз видел столкновение идентичных ботов и отличались они долгим противостоянием. Частные случаи поведения разнообразят поведение..
- "Сдерживание" — атаковать нейтральные планеты которые атакует противник так, что-бы сразу сразу после захвата планета перешла нам. Работает правда только при одиночных ударах - при постоянном пото ке потребуется больше затрат
- "Фронтовик" — высылать подмогу планетам которые ближе к врагу
- "С мира по нитке" — не высылать большие группы кораблей, а атаковать одиночными пачками в зависимости от продуктивности планеты
- "Превентивный удар" — отбивать планеты которые ближе всего. Это повысит прогнозируемость, поскольку противник будет дольше лететь
- "Отступление" — сдавать планету если заведомо известна её потеря (невозможность подмоги) + плохой прогноз на будущее + есть рядом нейтральная планета, захватив которую можно получить прирост продуктивности
См также redmassacre, форум, galcon форум, tcp server.